<?php
class Gest_contenidos_etiquetas extends MY_Controller {

	public function __construct()
    {
    	# Al constructor le envío la clase Controlador, y el nombre de la entidad gestionada
    	parent::__construct(get_class($this), 'gest_contenido');

    	$this->title = 'Contenido';
		$this->CARPETA_VISTAS = 'contenido/';
		$this->nombre_entidad = 'Contenido';
		$this->nombre_entidad_plural = 'Contenido/Etiquetas';

		$this->pagina_editar = $this->CARPETA_VISTAS . 'contenido_etiqueta_edit_view';

		$this->exportarExcelPermitido = FALSE;
		$this->nuevoPermitido = FALSE;
	}

	/* Valida los datos del formulario en base a las propiedades del modelo al que referencia. */
	public function validarForm($datos = array())
	{	
		if($this->input->is_ajax_request()) echo '';
		else return TRUE;
	}

	/* IMPORTANTE: DEBE existir esta función. 
	 * Crea un objeto de la entidad correspondiente y lo pobla con la información obtenida a 
	 * partir del formulario recibido a través de POST.	*/
	protected function getObjetoDesdeForm()
	{
		$idEntidad = is_numeric($this->input->post('txt_id')) ? $this->input->post('txt_id') : NULL;
		$objEntidad = $this->getObjeto($idEntidad);

		$datos['objEntidad'] = $objEntidad;
		$datos['objRelacionados'] = array();

		return $datos;
	}

	/* IMPORTANTE: DEBE existir esta función. 
	 * Carga en el arreglo que luego se pasarán a las vistas, los datos correspondientes a otras entidades que se
	 * necesiten. Por ejemplo, en este método deben cargarse las entidades a las que puede asociarse o relacionarse
	 * la entidad actual. Si no se requiriesen, no se agrega nada. */
	protected function cargarDatosRelacionados($dataView)
	{
		return $dataView;
	}

	/* IMPORTANTE: DEBE existir esta función. 
	 * Obtiene el listado de elementos de acuerdo a los filtros que se hayan establecido y enviado a través
	 * del método POST. Devuelve un detalle de los filtros aplicados (o vacío si no hubiera filtros)	*/	
	protected function _aplicarFiltros($dataView = array())
	{
		// Creo un objeto del modelo, para poblarlo con los datos que necesito mostrar
		$objEntidad = $this->getObjeto();
		$detalle_filtros = '';
		
		$dataView['objEntidad'] = $objEntidad;
		$dataView['detalle_filtros'] = $detalle_filtros;

		return $dataView;
	}

	/* IMPORTANTE: DEBE existir esta función.
	 * Valida las condiciones que deben cumplirse para que un elemento pueda ELIMINARSE. */
	protected function validarEliminacion($id_elemento)
	{
		return FALSE;
	}

	/* IMPORTANTE: DEBE existir esta función.
	 * Valida las condiciones que deben cumplirse para que un elemento pueda EDITARSE. */
	protected function validarEdicion($id_elemento)
	{
		return TRUE;
	}

	public function guardar(){
		$idEntidad = is_numeric($this->input->post('txt_id')) ? $this->input->post('txt_id') : NULL;
		$objEntidad = $this->getObjeto($idEntidad);

		if($objEntidad->exists()) {
			# Se manejan transacciones para interactuar con la BD
			$objEntidad->trans_begin();
			$errores = '';
			foreach ($this->input->post('sel_etiquetas') as $id_etiqueta) {
				$objEtiqueta = new Gest_etiqueta($id_etiqueta);
				$objEntidad->skip_validation()->save($objEtiqueta);
				$errores .= (empty($errores) ? '' : '</br>') . $objEntidad->error->string;
			}
			if ($objEntidad->trans_status() === FALSE) # Si la transacción falló, hago un rollback 
				$objEntidad->trans_rollback();
			else # Transacción exitosa, realizo el commit 
				$objEntidad->trans_commit();

			# Almaceno todos los errores que hubieran podido ocurrir
			$dataView['error'] = $errores;
		}
		else $dataView['error'] = 'No existe contenido, no se pueden guardar las etiquetas.';

		redirect('gest_contenidos/ver_todos');
		//$this->ver_todos($dataView);
	}
}